package com.ssy.lingxi.system.service;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.system.dto.request.*;
import com.ssy.lingxi.system.dto.response.MenuListByRoleIdResponse;
import com.ssy.lingxi.system.dto.response.MenuMemberDetailsResponse;
import com.ssy.lingxi.system.dto.response.MenuResponse;
import com.ssy.lingxi.system.model.request.MenuSourceVO;
import org.springframework.web.bind.annotation.RequestBody;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 权限菜单管理业务层
 *
 * @author wrc ， corrected by 万宁
 * @date 2020/5/11
 */
public interface MenuService {

    /**
     * 查询所有权限菜单列表
     * @param sourceVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<MenuResponse>> menuList(MenuSourceVO sourceVO);

    /**
     * 添加权限菜单实体类
     * @param httpServletRequest Http请求
     * @param request 接口参数
     * @return 操作结果
     */
    Wrapper<Void> menuAdd(HttpServletRequest httpServletRequest,MenuAddRequest request);

    /**
     * 删除权限菜单
     * @param request 接口参数
     * @return 操作结果
     */
    Wrapper<Void> menuDelete(MenuDeleteRequest request);

    /**
     * 根据角色ID查询权限菜单列表
     * @param httpServletRequest Http请求
     * @param request 接口参数
     * @return 查询结果
     */
    Wrapper<MenuListByRoleIdResponse> menuListByRoleId(HttpServletRequest httpServletRequest, MenuRequest request);

    /**
     * 配置角色权限
     * @param request 接口参数
     * @return 操作结果
     */
    Wrapper<Void> menuRoleBinding(MenuBindingRoleRequest request);

    /**
     * 配置角色按钮权限
     * @param request 接口参数
     * @return 操作结果
     */
    Wrapper<Void> menuRoleBindingButton(MenuRoleBindingButtonRequest request);

    /**
     * 向会员服务同步指定角色的权限配置
     * @param request 角色Id
     * @return 同步结果
     */
    Wrapper<Void> syncRoleBinding(MenuRequest request);

    /**
     * 向会员服务同步所有角色的权限配置
     * @return 同步结果
     */
    Wrapper<Void> syncAllRoleBinding();

    /**
     * 根据会员ID查询按钮
     * @param request 接口参数
     * @return 查询结果
     */
    Wrapper<MenuListByRoleIdResponse> menuRoleButtonList(MenuRoleButtonListRequest request);

    /**
     * 修改菜单
     * @param request 接口参数
     * @param httpServletRequest Http请求
     * @return 操作结果
     */
    Wrapper<Void> menuUpdate(@RequestBody MenuUpdateRequest request, HttpServletRequest httpServletRequest);

    /**
     * 平台菜单管理-查询菜单详情
     * @param request 接口参数
     * @param httpServletRequest Http请求
     * @return 查询结果
     */
    Wrapper<MenuMemberDetailsResponse> menuDetails(MenuMemberDetailsRequest request, HttpServletRequest httpServletRequest);

    /**
     * 以树形菜单形式查询菜单列表（与会员服务登陆接口返回的权限菜单列表相同结构）
     * @param request 接口参数
     * @return 查询结果
     */
    Wrapper<List<Map<String, Object>>> treeMenuAsMemberLogin(MenuSourceVO request);

    /**
     * 初始化菜单属性json中的relationParentCode字段
     * @param source 1-业务平台 99-平台后台
     * @return 操作结果
     */
    Wrapper<Map<Long, String>> initMenuRelationParentCode(Integer source);
}
